From 445279eb47546331a52a7e9b1c78bf21b0d9c871 Mon Sep 17 00:00:00 2001 From: Magnus Henoch Date: Wed, 8 Nov 2006 20:34:36 +0000 Subject: [PATCH] (url-http-handle-authentication): If there are several authentication headers, use the strongest available method. --- lisp/url/url-http.el | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index c0bc2d9739e..68c54c249f5 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -313,21 +313,27 @@ This allows us to use `mail-fetch-field', etc." (type nil) (url (url-recreate-url url-current-object)) (url-basic-auth-storage 'url-http-real-basic-auth-storage) - auth) + auth + (strength 0)) ;; Cheating, but who cares? :) (if proxy (setq url-basic-auth-storage 'url-http-proxy-basic-auth-storage)) - ;; find first supported auth - (while auths - (setq auth (url-eat-trailing-space (url-strip-leading-spaces (car auths)))) - (if (string-match "[ \t]" auth) - (setq type (downcase (substring auth 0 (match-beginning 0)))) - (setq type (downcase auth))) - (if (url-auth-registered type) - (setq auths nil) ; no more check - (setq auth nil - auths (cdr auths)))) + ;; find strongest supported auth + (dolist (this-auth auths) + (setq this-auth (url-eat-trailing-space + (url-strip-leading-spaces + this-auth))) + (let* ((this-type + (if (string-match "[ \t]" this-auth) + (downcase (substring this-auth 0 (match-beginning 0))) + (downcase this-auth))) + (registered (url-auth-registered this-type)) + (this-strength (cddr registered))) + (when (and registered (> this-strength strength)) + (setq auth this-auth + type this-type + strength this-strength)))) (if (not (url-auth-registered type)) (progn -- 2.30.2